﻿using System;
using System.Collections.Generic;
using SqlParameter = System.Data.SqlClient.SqlParameter;
using SqlDbType = System.Data.SqlDbType;
using IDataReader = System.Data.IDataReader;

namespace GamePlusClassLibrary
{
    public class Jogo
    {
        public int? Idf_Jogo { get; set; }
        public string Nme_Jogo { get; set; }
        public DateTime Dta_Cadastro { get; set; }
        public DateTime Dta_Alteracao { get; set; }
        public bool Flg_Ativo { get; set; }
        public int Idf_Categoria { get; set; }
        public string Des_Instrucoes { get; set; }
        public int Num_Jogado { get; set; }
        public int Idf_Jogo_Tipo { get; set; }
        public string Des_Chamada { get; set; }
        public string Des_Codigo_HTML { get; set; }
        public string Des_Referencia_URL { get; set; }

        public void Salvar()
        {
            List<SqlParameter> param = new List<SqlParameter>();
            param.Add(new SqlParameter("@Idf_Jogo", SqlDbType.Int));
            param.Add(new SqlParameter("@Nme_Jogo", SqlDbType.VarChar));
            param.Add(new SqlParameter("@Dta_Cadastro", SqlDbType.DateTime));
            param.Add(new SqlParameter("@Dta_Alteracao", SqlDbType.DateTime));
            param.Add(new SqlParameter("@Flg_Ativo", SqlDbType.Bit));
            param.Add(new SqlParameter("@Des_Instrucoes", SqlDbType.VarChar));
            param.Add(new SqlParameter("@Num_Jogado", SqlDbType.Int));
            param.Add(new SqlParameter("@Idf_Jogo_Tipo", SqlDbType.Int));
            param.Add(new SqlParameter("@Des_Chamada", SqlDbType.VarChar));
            param.Add(new SqlParameter("@Des_Codigo_HTML", SqlDbType.VarChar));
            param.Add(new SqlParameter("@Des_Referencia_URL", SqlDbType.VarChar));

            if (this.Idf_Jogo.HasValue)
                param[0].Value = this.Idf_Jogo.Value;
            else
                param[0].Value = DBNull.Value;
            
            param[1].Value = this.Nme_Jogo;
            param[2].Value = this.Dta_Cadastro;
            param[3].Value = this.Dta_Alteracao;
            param[4].Value = this.Flg_Ativo;
            param[5].Value = this.Des_Instrucoes;
            param[6].Value = this.Num_Jogado;
            param[7].Value = this.Idf_Jogo_Tipo;
            param[8].Value = this.Des_Chamada;

            if (!string.IsNullOrEmpty(this.Des_Codigo_HTML))
                param[9].Value = this.Des_Codigo_HTML;
            else
                param[9].Value = DBNull.Value;

            if (!string.IsNullOrEmpty(this.Des_Referencia_URL))
                param[10].Value = this.Des_Referencia_URL;
            else
                param[10].Value = DBNull.Value;

            string sQuery = string.Empty;

            if (!this.Idf_Jogo.HasValue)
                sQuery = @"
                INSERT INTO Jogo (Nme_Jogo, Dta_Cadastro, Dta_Alteracao, Flg_Ativo, Des_Instrucoes, Num_Jogado, Idf_Jogo_Tipo, Des_Chamada, Des_Codigo_HTML, Des_Referencia_URL)
                VALUES(@Nme_Jogo, @Dta_Cadastro, @Dta_Alteracao, @Flg_Ativo, @Des_Instrucoes, @Num_Jogado, @Idf_Jogo_Tipo, @Des_Chamada, @Des_Codigo_HTML, @Des_Referencia_URL)
                SELECT SCOPE_IDENTITY()
            ";
            else
                sQuery = @"
                UPDATE Jogo SET
                Nme_Jogo = @Nme_Jogo,
                Dta_Cadastro = @Dta_Cadastro,
                Dta_Alteracao = @Dta_Alteracao,
                Flg_Ativo = @Flg_Ativo,
                Des_Instrucoes = @Des_Instrucoes,
                Num_Jogado = @Num_Jogado,
                Idf_Jogo_Tipo = @Idf_Jogo_Tipo,
                Des_Chamada = @Des_Chamada,
                Des_Codigo_HTML = @Des_Codigo_HTML,
                Des_Referencia_URL = @Des_Referencia_URL
                WHERE Idf_Jogo = @Idf_Jogo
                ";

            object id = DataAccessLayer.ExecuteScalar(System.Data.CommandType.Text, sQuery, param);
            this.Idf_Jogo = int.Parse(id.ToString());
        }

        public static Jogo Carregar(int pIdfJogo)
        {
            List<SqlParameter> param = new List<SqlParameter>();
            param.Add(new SqlParameter("@Idf_Jogo", SqlDbType.Int));
            param[0].Value = pIdfJogo;

            string sQuery = @"SELECT * FROM Jogo WHERE Idf_Jogo = @Idf_Jogo";

            Jogo obj = null;
            using (IDataReader iDr = DataAccessLayer.ExecuteReader(System.Data.CommandType.Text, sQuery, param))
            {
                if (iDr.Read())
                {
                    obj = new Jogo();
                    obj.Idf_Jogo = int.Parse(iDr["Idf_Jogo"].ToString());
                    obj.Nme_Jogo = iDr["Nme_Jogo"].ToString();
                    obj.Dta_Cadastro = DateTime.Parse(iDr["Dta_Cadastro"].ToString());
                    obj.Dta_Alteracao = DateTime.Parse(iDr["Dta_Alteracao"].ToString());
                    obj.Flg_Ativo = bool.Parse(iDr["Flg_Ativo"].ToString());
                    obj.Idf_Categoria = int.Parse(iDr["Idf_Categoria"].ToString());
                    obj.Des_Instrucoes = iDr["Des_Instrucoes"].ToString();
                    obj.Num_Jogado = int.Parse(iDr["Num_Jogado"].ToString());
                    obj.Idf_Jogo_Tipo = int.Parse(iDr["Idf_Jogo_Tipo"].ToString());
                    obj.Des_Chamada = iDr["Des_Chamada"].ToString();
                    obj.Des_Codigo_HTML = iDr["Des_Codigo_HTML"].Equals(DBNull.Value) ? string.Empty : iDr["Des_Codigo_HTML"].ToString();
                    obj.Des_Referencia_URL = iDr["Des_Referencia_URL"].Equals(DBNull.Value) ? string.Empty : iDr["Des_Referencia_URL"].ToString();
                }
            }

            return obj;
        }
    }
}
